package 剑指offer;

public class p60n个骰子的点数 {
    public double[] dicesProbability(int n) {
        //动态规划
        int[][] dp=new int[n+1][6*n+1];

        //初始状态
        for (int i = 1; i <=6; i++) {
            dp[1][i]=1;//一个骰子时，1-6出现的次数各为 1
        }

        for (int i = 2; i <=n; i++) {
            //i 表示几个骰子
            for (int j = i; j <=i*6 ; j++) {
                //j 表示i个骰子的点数和
                for (int k = 1; k <=6 && k<j; k++) {
                    //k 表示每个骰子的六个点数，注意k 小于 当前点数和j
                    dp[i][j]=dp[i][j]+dp[i-1][j-k];
                    //dp[i][j] 表示 i个骰子点数和为j 出现的次数
                }
            }
        }

        double[] ans=new double[5*n+1];
        for (int i = n; i <=6*n; i++) {
            ans[i-n]=((double)dp[n][i]) / Math.pow(6,n);
        }
        return ans;
    }
}
